﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Runtime.InteropServices;
using Lcsoft.TemplateEngine.Core;

namespace Lcsoft.TemplateEngine.Tags
{
	/// <summary>
	/// 表示开关模板引擎特别功能的配置型语句标签。
	/// </summary>
	[ComVisible(true)]
	[Serializable]
	public sealed class FeatureTag : ConfigurationElement
	{
		/// <summary>
		/// 初始化 <see cref="FeatureTag"/> 类的新实例。
		/// </summary>
		/// <param name="prefix">模板引擎语句标签的前缀名。</param>
		/// <param name="line">标签所在的行数。</param>
		/// <param name="column">标签所在的列数。</param>
		public FeatureTag(string prefix, int line, int column) : base(prefix, "feature", line, column) { }

		/// <summary>
		/// 获取一个值，该值指示生成结果的代码当中是否包含使用 <see cref="System.Diagnostics.Stopwatch"/> 测量运行时间的功能。如果设置为 true，会自动为页面添加 <see cref="System.Diagnostics"/> 命名空间，在模板代码中调用 {$this.Runningwatch$} 即可访问由此创建的 <see cref="System.Diagnostics.Stopwatch"/> 的实例。
		/// </summary>
		public bool EnableStopwatch
		{
			get { return TemplateEngineHelper.ToBoolean(this.GetAttributeValue("enablestopwatch")); }
		}

		/// <summary>
		/// 获取一个值，该值指示生成结果的代码当中是否包含动静平衡功能（Static And Dynamic Equilibrium）。如果设置为 true，您必须在相关的类中实现 <see cref="ISDEHandler"/> 接口。
		/// </summary>
		public bool EnableSDE
		{
			get { return TemplateEngineHelper.ToBoolean(this.GetAttributeValue("enablesde")); }
		}

		/// <summary>
		/// 获取一个值，该值指示生成结果的代码当中是否包含自定义运行时支持的功能。如果设置为 true，您必须在相关的类中实现 <see cref="IRuntimeHandler"/> 接口。
		/// </summary>
		public bool EnableRuntimeHandler
		{
			get { return TemplateEngineHelper.ToBoolean(this.GetAttributeValue("enableruntimeHandler")); }
		}

		/// <summary>
		/// 设置一个值，该值指示是否开启 .css 和 .js 文档打包功能。
		/// </summary>
		public bool EnableFilePacking
		{
			get { return TemplateEngineHelper.ToBoolean(this.GetAttributeValue("enablefilepacking")); }
		}
	}
}
